package com.vrp3d.common.utils;

import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 集合工具类
 *
 * @author vrp3d
 */
public class CollectionUtil {

    /**
     * 删除(string)集合中的null或者空字符串""
     *
     * @param list
     * @return
     */
    public static List<String> removeNull(List<String> list) {
        list.removeIf(StringUtils::isBlank);
        return list;
    }

    /**
     * 删除list<String>中对应的字符串
     *
     * @param oldList
     * @param targetString
     * @return
     */
    public static List<String> removeString(List<String> oldList, String targetString) {
        //下面会调用equals方法对比,如果原来的list中包含null或者""会报NPE,于是先去除list中的null和""
        List<String> list = removeNull(oldList);
        list.removeIf(next -> next.equals(targetString));
        return list;
    }

    /**
     * 去除集合中的重复数据(如果是对象需要重写equals和hashCode方法才会有效)
     *
     * @param list
     * @return
     */
    public static <T> List<T> removeDuplicates(List<T> list) {
        if (null != list && list.size() > 0) {
            //无序去重
            /*Set<String> set = Sets.newHashSet();
            set.addAll(list);
            list.clear();
            list.addAll(set);*/

            //有序去重
            Set<T> set = new HashSet<>();
            List<T> newList = new ArrayList<>();
            for (T element : list) {
                if (set.add(element)) {
                    newList.add(element);
                }
            }
            return newList;
        }
        return null;
    }
}
